1   /*
2    * Copyright (C) 2012 The Guava Authors
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package com.google.common.collect;
18  
19  import com.google.caliper.Benchmark;
20  import com.google.caliper.Param;
21  
22  import java.util.List;
23  
24  /**
25   * Benchmark for various ways to create an {@code ImmutableList}.
26   *
27   * @author Louis Wasserman
28   */
29  public class ImmutableListCreationBenchmark {
30  
31    @Param({"10", "1000", "1000000"})
32    int size;
33  
34    private static final Object OBJECT = new Object();
35  
36    @Benchmark int builderAdd(int reps) {
37      int size = this.size;
38      int dummy = 0;
39      for (int rep = 0; rep < reps; rep++) {
40        ImmutableList.Builder<Object> builder = ImmutableList.builder();
41        for (int i = 0; i < size; i++) {
42          builder.add(OBJECT);
43        }
44        dummy += builder.build().size();
45      }
46      return dummy;
47    }
48  
49    @Benchmark int preSizedBuilderAdd(int reps) {
50      int size = this.size;
51      int dummy = 0;
52      for (int rep = 0; rep < reps; rep++) {
53        ImmutableList.Builder<Object> builder = new ImmutableList.Builder<Object>(size);
54        for (int i = 0; i < size; i++) {
55          builder.add(OBJECT);
56        }
57        dummy += builder.build().size();
58      }
59      return dummy;
60    }
61  
62    @Benchmark int copyArrayList(int reps) {
63      int size = this.size;
64      int dummy = 0;
65      for (int rep = 0; rep < reps; rep++) {
66        List<Object> builder = Lists.newArrayList();
67        for (int i = 0; i < size; i++) {
68          builder.add(OBJECT);
69        }
70        dummy += ImmutableList.copyOf(builder).size();
71      }
72      return dummy;
73    }
74  
75    @Benchmark int copyPreSizedArrayList(int reps) {
76      int size = this.size;
77      int tmp = 0;
78      for (int rep = 0; rep < reps; rep++) {
79        List<Object> builder = Lists.newArrayListWithCapacity(size);
80        for (int i = 0; i < size; i++) {
81          builder.add(OBJECT);
82        }
83        tmp += ImmutableList.copyOf(builder).size();
84      }
85      return tmp;
86    }
87  }